package jvm;
import org.junit.Test;

/**
 * 位运算演示
 * 使用0x表示值
 * 值的向左、向右移动
 * 按位与、按位或、异或
 * @author fidel
 */
public class BitArithmeticDemo {
    @Test
    public void test() {
        int a = 1;
        System.out.println("a等于" + a);
        // a向左移动31位再将值减1
        System.out.println("(a<<31)-1等于" + ((a << 31) - 1));
        // a向左移动31位
        System.out.println("a<<31等于" + (a << 31));
        // a向左移动32位
        System.out.println("a<<32等于" + (a << 32));
        // a向左移动33位
        System.out.println("a<<33等于" + (a << 33));
        a = 0x35;
        int b = 0x4c;
        System.out.println("a等于" + a);
        System.out.println("b等于" + b);
        /*
         * a按位与b
         * 先将两个值转化为二进制值，再比较各个位的值
         * 如果两个值的同一位的值都等于1，则结果值的这一位的值为1
         * 否则，结果值得这一位的值为0
         */
        System.out.println("a&b等于" + (a & b));
        /*
         * a按位或b
         * 先将两个值转化为二进制值，再比较各个位的值
         * 如果两个值的同一位的值都等于0，则结果值的这一位的值为0
         * 否则，结果值得这一位的值为1
         */
        System.out.println("a|b等于" + (a | b));
        a = 0x9a;
        b = 0x4d;
        System.out.println("a等于" + a);
        System.out.println("b等于" + b);
        /*
         * a异或b
         * 先将两个值转化为二进制值，再比较各个位的值
         * 如果两个值的同一位的值不相等，则结果值的这一位的值为1
         * 否则，结果值得这一位的值为0
         */
        System.out.println("a^b等于" + (a ^ b));
        a = b;
        System.out.println("令a等于b，则a^b等于" + (a ^ b));
    }
}
